package cn.tedu.oopTestConstructor.cn.tedu;


/**
 * @author SWJ
 * @create 2021-06-15 9:41
 * oop2复习构造方法
 * 与类同名且没有返回值的类型的方法，用于创建对象创建对象时候
 * 自动触发，创建几个对象就会触发几次
 */
public class ReviewOop2 {
    public static void main(String[] args) {
        new Cat();
        Cat c = new Cat("猫", 1, 10.8);
        DD d = new DD();
        d.eat();
        System.out.println(d.price);
        d.jump();
        /**创建子类对象调用继承过来的父类方法
         * 子类不可以使用父类的私有资源，原因不可见*/
    }
}

class Cat {
    int id;
    String name;
    double price;

    /**构造代码块
     * {}提取所有构造方法的共性
     * 静态代码块
     *构造代码块
     * 局部代码块{}方法里
     * */ {
        System.out.println("构造代码块");
    }

    public Cat() {
        System.out.println("无参构造");

    }

    static {
        System.out.println("静态代码块");
    }

    public void eat() {
        /**局部代码块：{}方法里+
         * 用于控制变量的作用范围，范围越小越好*/
        System.out.println("局部代码块");
    }

    public Cat(String name, int id, double price) {
        /**作用1
         * 当本类的成员变量与局部变量同名时，可以指定本类的成员变量
         * 规避就近原则 指定成员变量*/
        this.name = name;
        this.id = id;
        this.price = price;
    }
}

/**
 * 通过关键字extends关键字
 */
class DD extends Cat {
    public DD() {
/**super的作用调用父类的无参构造
 * 创建子类的对象先会调用父类的构造函数*/
        super();
    }

    @Override//这是个重写的方法
    public void eat() {
        /**super作用 父类变量同名时候指定父类成员变量*/
        System.out.println("重写");
    }

    public void jump() {
        System.out.println("jump方法");

    }
}